package com.step.scene.light;


public class Light {	
	// 聚光灯光圈中心到边缘的衰减程度
	protected float spotExponent;
	// 聚光灯光锥的扩散角度
	protected float spotCutoffAngle = 180;
	// 灯光强度常量衰减因子
	protected float constantAttenuation;
	// 灯光强度线性衰减因子
	protected float linearAttenuation;
	// 灯光强度平方衰减因子
	protected float quadraticAttenuation;
	// 最终衰减系数为：1 / (constantAttenuation + linearAttenuation * d + quadraticAttenuation * d * d)
	// 其中d为距离光源的距离
	/**
	 * 
	 * @return
	 */
	public float getSpotExponent() {
		return spotExponent;
	}
	
	/**
	 * 设置光圈中心到边缘的衰减程度，有效值为0-128。默认为0
	 * @param spotExponent
	 */
	public void setSpotExponent(float spotExponent) {
		if(spotExponent < 0) spotExponent = 0;
		if(spotExponent > 128) spotExponent = 128;
		
		this.spotExponent = spotExponent;
	}
	/**
	 * 
	 * @return
	 */
	public float getSpotCutoffAngle() {
		return spotCutoffAngle;
	}
	
	/**
	 * 设置光照扩散角度
	 * @param spotCutoffAngle 有效值范围为0-90度和180度，默认是180度
	 */
	public void setSpotCutoffAngle(float spotCutoffAngle) {
		if (spotCutoffAngle < 0) 
			this.spotCutoffAngle = 0;
		else if (spotCutoffAngle <= 90 || spotCutoffAngle == 180)
			this.spotCutoffAngle = spotCutoffAngle;
		else
			this.spotCutoffAngle = 90;
	}
	
	/**
	 * 
	 * @return
	 */
	public float getConstantAttenuation() {
		return constantAttenuation;
	}
	
	/**
	 * 设置光照衰减因子。最终衰减系数为：1 / (constant + linear * d + quadratic * d * d)
	 * 其中ｄ为到光源的距离
	 * @param constant 常数因子
	 * @param linear 线性因子
	 * @param quadratic 平方因子
	 */
	public void setAttenuation(float constant, float linear, float quadratic){
		setConstantAttenuation(constant);
		setLinearAttenuation(linear);
		setQuadraticAttenuation(quadratic);
	}
	/**
	 * 
	 */
	public void setConstantAttenuation(float constantAttenuation) {
		this.constantAttenuation = constantAttenuation;
	}
	
	/**
	 * 
	 * @return
	 */
	public float getLinearAttenuation() {
		return linearAttenuation;
	}
	
	/**
	 * 
	 */
	public void setLinearAttenuation(float linearAttenuation) {
		this.linearAttenuation = linearAttenuation;
	}
	
	/**
	 * 
	 * @return
	 */
	public float getQuadraticAttenuation() {
		return quadraticAttenuation;
	}
	
	/**
	 * 
	 */
	public void setQuadraticAttenuation(float quadraticAttenuation) {
		this.quadraticAttenuation = quadraticAttenuation;
	}
}
